﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using DataAccess;
using DevExpress.XtraEditors;
using QuanLyKhachSan.FormThemCapNhat;
using QuanLyKhachSan.FormTimKiem;
using QuanLyKhachSan.TemplateReport;
using BLL;
using NLog;

namespace QuanLyKhachSan
{
    public partial class TabPhong : XtraUserControl, IGeneatetabName
    {
        private PhongManager pManager;
        protected static Logger _logger = LogManager.GetCurrentClassLogger();
        public TabPhong()
        {
            InitializeComponent();
            pManager = new PhongManager();
        }

        public string Getname()
        {
            return "Phòng";
        }

        private void TabPhong_Load(object sender, EventArgs e)
        {
            loadDB();
        }

        private void loadDB()
        {
            List<Phong> listPhongs = pManager.LayDanhSach().Result;
            var focusedRowHandle = gridView1.FocusedRowHandle;
            gridControlPhong.DataSource = listPhongs;
            gridView1.BestFitColumns();
            gridView1.FocusedRowHandle = focusedRowHandle;
        }

        private void btnThem_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            Them();
        }

        private void Them()
        {
            _logger.Info(Commons.ToString() + ", Chọn thao tác thêm phòng.");
            FormPhongCapNhat frmPhongCapNhat = new FormPhongCapNhat();
            frmPhongCapNhat.ShowDialog();
            if (frmPhongCapNhat.isInserted)
            {
                XtraMessageBox.Show("Thêm thành công !");
                loadDB();
            }
        }

        private void CapNhat()
        {
            _logger.Info(Commons.ToString() + ", Chọn thao tác cập nhật phòng.");
            Phong phongSelected = GetRowSelected();
            if (phongSelected != null)
            {
                FormPhongCapNhat frm = new FormPhongCapNhat(phongSelected);
                frm.btnThaoTac.Text = "Cập nhật";
                frm.txtSoPhong.Enabled = false;
                frm.ShowDialog();
                if (frm.isInserted)
                {
                    XtraMessageBox.Show("Cập nhật thành công");
                    loadDB();
                }
            }
            else
            {
                XtraMessageBox.Show("Bạn phải chọn 1 dịch vụ để cập nhật.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void btnTimKiem_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            TimKiem();
        }

        private void TimKiem()
        {
            _logger.Info(Commons.ToString() + ", Chọn thao tác tìm kiếm.");
            FormTimPhong frmTimPhong = new FormTimPhong();
            if (frmTimPhong.ShowDialog() == DialogResult.OK)
            {
                XtraMessageBox.Show("Kết quả tìm thấy là: " + frmTimPhong.Result.Count());
                gridControlPhong.DataSource = frmTimPhong.Result.ToList();
            }
        }

        private void barButtonItemThem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            Them();
        }

        private void barButtonItemCapNhat_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            CapNhat();
        }

        private void barButtonItemTimKiem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            gridView1.OptionsFind.AlwaysVisible = !gridView1.OptionsFind.AlwaysVisible;
        }

        private void barButtonItem4_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            loadDB();
        }

        private Phong GetRowSelected()
        {
            int rowSelected = gridView1.GetSelectedRows()[0];
            return gridView1.GetRow(rowSelected) as Phong;
        }

        private void gridView1_RowUpdated(object sender, DevExpress.XtraGrid.Views.Base.RowObjectEventArgs e)
        {
            var p = GetRowSelected(); 
            var rs = pManager.CapNhat(p);
            if (p != null)
            {
                XtraMessageBox.Show(rs.Sucess() ? "Cập nhật thành công" : rs.GetErrorMessage());
            }
        }

        private void thêmPhòngToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Them();
        }

        private void cậpNhậtPhòngToolStripMenuItem_Click(object sender, EventArgs e)
        {
            CapNhat();
        }

        private void tìmKiếmPhòngToolStripMenuItem_Click(object sender, EventArgs e)
        {
            TimKiem();
        }

        private void inDanhSachPhòngToolStripMenuItem_Click(object sender, EventArgs e)
        {
            In();
        }

        private void barButtonItem10_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            In();
        }

        private void In()
        {
            _logger.Info(Commons.ToString() + ", Chọn thao tác in danh sach phong.");

            var reportPhong = new XrptPhong();
            try
            {
                var report = new FormReport(reportPhong);
                report.ShowDialog();
            }
            catch (Exception)
            {
                XtraMessageBox.Show("Vui lòng đảm bảo tồn tại dữ liệu trước khi in");
            }
        }

        private void btnCapNhat_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            CapNhat();
        }
    }
}
